자주 쓰이는 메소드및 API 를 정리합니다. |
[1] |
|
등록일:2008-03-09 15:29:28 (0%) 작성자: 제목:자바,정규식과 replace() |
|
자바초보입니다.
String 클래스를 살펴보다가 정규식이란걸 어제 처음 알았는데요.
replaceAll 메서드를 사용할때 정규식을 이용하는데
예를들어,
"23123()asdawe()", "2311111()asdwq()".....
이런 문자열이 있을때 문자 다음에 오는 괄호는 그대로 두고 숫자 다음에 오는 괄호만 다른 문자로 바꾸려면 어떻게 해야 하나요?
"23123**asdawe()", "2311111**asdwq()".....
가급적 쉽게 가르쳐 주시면 감사하겠습니다.
-------------------------------------------------------------------------------------------------
정규식은... Java API보시고 이리저리만들어보는 수 밖에 없습니다.
일단 질문하신 내용의 예제를 알려드릴께요.
설명할게 너무 많기 때문에... 적절한 수준에서 정리했습니다.
import java.util.regex.*; // Pattern과 Matcher가 속한 패키지
class RegularEx5
{
public static void main(String[] args)
{
String source = "23123()asdawe()23123()asdawe()23123()asdawe()";
String pattern = "\\d+\\(\\)"; // 숫자(\\d)뒤에오는 괄호를 패턴으로 지정
// \d는 숫자를 의미하며 +는 하나이상의 숫자가 있어야함을 의미
// 괄호는 예약문자(?)이므로 \\를 앞에 붙여줘야 괄호로 인식
// 괄호앞에 \\를 붙이지 않으면 그룹화문자로 인식한다.
// \를 \\와 같이 두개씩 쓰는 이유는 문자열 내에서 \를 표현하려면 두개 써줘야하기 때문
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(source);
System.out.println("source:"+source);
int i=0;
while(m.find()) {
// 지정한 패턴과 매칭되는 부분을 치환한다. 마지막 두글자인 괄호를 잘라내고
// 원하는 문자(@@)로 바꾼다.
// find()를 통해서 패턴과 일치하는 부분은 m.group()을 통해서 얻는다.
m.appendReplacement(sb, m.group().substring(0, m.group().length()-2)+"@@");
}
m.appendTail(sb);
System.out.println("result:"+sb.toString());
}
}
/*
source:23123()asdawe()23123()asdawe()23123()asdawe()
result:23123@@asdawe()23123@@asdawe()23123@@asdawe()
*/
숫자뒤에오는 ()를 @@로 바꾼겁니다.
[예제2] - 다양한 정규식활용예
import java.util.regex.*; // Pattern과 Matcher가 속한 패키지
class RegularEx2
{
public static void main(String[] args)
{
String[] data = {"bat", "baby", "bonus", "c", "cA",
"ca", "co", "c.", "c0", "c#",
"car","combat","count", "date", "disc"
};
String[] pattern = {".*","c[a-z]*","c[a-z]", "c[a-zA-Z]", "c[a-zA-Z0-9]",
"c.","c.*","c\\.","c\\w","c\\d","c.*t", "[b|c].*",
".*a.*", ".*a.+", "[b|c].{2}"
};
for(int x=0; x < pattern.length; x++) {
Pattern p = Pattern.compile(pattern[x]);
System.out.print("Pattern : " + pattern[x] + " 결과: ");
for(int i=0; i < data.length; i++) {
Matcher m = p.matcher(data[i]);
if(m.matches())
System.out.print(data[i] + ",");
}
System.out.println();
}
} // public static void main(String[] args)
}
/*
Pattern : .* 결과: bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,
Pattern : c[a-z]* 결과: c,ca,co,car,combat,count,
Pattern : c[a-z] 결과: ca,co,
Pattern : c[a-zA-Z] 결과: cA,ca,co,
Pattern : c[a-zA-Z0-9] 결과: cA,ca,co,c0,
Pattern : c. 결과: cA,ca,co,c.,c0,c#,
Pattern : c.* 결과: c,cA,ca,co,c.,c0,c#,car,combat,count,
Pattern : c\. 결과: c.,
Pattern : c\w 결과: cA,ca,co,c0,
Pattern : c\d 결과: c0,
Pattern : c.*t 결과: combat,count,
Pattern : [b|c].* 결과: bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,
Pattern : .*a.* 결과: bat,baby,ca,car,combat,date,
Pattern : .*a.+ 결과: bat,baby,car,combat,date,
Pattern : [b|c].{2} 결과: bat,car,
*/
출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10106&eid=0QxOJXo6uahWgsod6hG8NohBwwCOxmr8
&qb=wNq52SBtYXRjaGVy |
[본문링크] 자바,정규식과 replace()
|
[1]
|
|
|
|
|
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=2421 |
|
|
|
|
|
|
|
|
|